// function ajax(url, callback) {
//   let xhr = new XMLHttpRequest();
//   xhr.open("GET", url);
//   xhr.send();
//   xhr.onload = function() {
//     if(this.status === 200) {
//       callback(JSON.parse(this.response))
//     } else {
//       throw new Error("加载失败")
//     }
//   }
// }

// function ajax(url) {
//   return new Promise((resolve, reject) => {
//     let xhr = new XMLHttpRequest();
//     xhr.open("GET", url);
//     xhr.send();
//     xhr.onload = function() {
//       if(this.status === 200) {
//         resolve(JSON.parse(this.response))
//       } else {
//         reject("加载失败")
//       }
//     }
//     xhr.onerror = function () {
//       reject(this)
//     }
//   })
// }

// ajax('url').then(value=>{
//   console.log(value)
// }, reason => {
//   console.log(reason)
// })

// ajax('url').then(value => ajax('url2')).then(value => console.log(value));

class ParamError extends Error {
  constructor(msg) {
    super(msg)
    this.name = 'ParamError'
  }
}
class HttpError extends Error {
  constructor(msg) {
    super(msg)
  }
}
function ajax(url) {
  return new Promise((resolve, reject) => {
    // document.getElementsByClassName('loading')[0].style.display = 'block';
    if(!/^http/.test(url)) throw new ParamError('请求地址格式错误')
    let xhr = new XMLHttpRequest();
    xhr.open("GET", url);
    xhr.send();
    xhr.onload = function() {
      if(this.status === 200) {
        resolve(JSON.parse(this.response))
      } else if(this.status === 404) {
        reject(new HttpError('404')) // 这里是异步，不能throw 
      } else {
        reject("加载失败")
      }
    }
    xhr.onerror = function () {
      reject(this)
    }
  })
}

// ajax('url').then(value => {
//   console.log(value);
// }).catch(error => {
//   if(error instanceof ParamError) {
//     console.log(error.message)
//   }
//   if(error instanceof HttpError) {
//     alert(error.message)
//   }
// });
